// 如果我们直接对一个泛型参数取 length 属性, 会报错, 因为这个泛型根本就不知道它有这个属性
(() => {
  // 没有泛型约束
  function fn<T>(x: T): void {
    // console.log(x.length)  // error
  }

  //   我们可以使用泛型约束来实现
  interface Lengthwise {
    //   接口中又一个属性length
    length: number;
  }

  // 指定泛型约束
  function fn2<T extends Lengthwise>(x: T): void {
    console.log(x.length);
  }
  fn2("asdsadas");
})();
